'''
create date: 20191028
create by: Illidan
used to: first week task
'''

#第一题作业
#方法1：for循环，效果1
print('第一题作业：')
for i in range(1,10):
    for j in range(1,i+1):
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
    print('')
print('=='*60)

#方法1-效果2：
for i in range(9,0,-1):
    for j in range(1,i+1):
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
    print('')
print('=='*60)

#方法1-效果3（用空格占位）：
for i in range(1,10):
    print('        '*(9-i), end='')
    for j in range(i,0,-1):
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
    print('')
print('=='*60)

#方法1-效果4：
for i in range(9,0,-1):
    print('        '*(9-i), end='')
    for j in range(i,0,-1):
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
    print('')
print('=='*60)

#方法2-效果1：
i = 1
while i<=9:
    j = 1
    while j<=i:
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
        j += 1
    print('')
    i += 1
print('=='*60)

#方法2-效果2：
i = 9
while i>0:
    j = 1
    while j<=i:
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
        j += 1
    print('')
    i -= 1
print('=='*60)

#方法2-效果3：
i = 1
while i<=9:
    j = i
    print('        ' * (9 - i), end='')
    while j>0:
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
        j -= 1
    print('')
    i += 1
print('=='*60)

#方法2-效果4：
i = 9
while i>=1:
    j = i
    print('        '*(9-i), end='')
    while j>0:
        print('{}*{}={:<4}'.format(j,i,i*j), end='')
        j -= 1
    print('')
    i -= 1
print('=='*60)

#第二题作业
'''
递归统计某目录的总大小
'''
import os
file_size_sum = 0
def func_folds_size(dir):
    '''
    统计当前路径下的文件总大小
    :param dir:
    :return:
    '''
    #读取文件路径下的所有文件
    fold = os.listdir(dir)

    #遍历文件，如果是文件，则读取文件大小，如果是文件夹，则递归读取文件大小
    for f in fold:
        file = os.path.join(dir,f)
        if os.path.isfile(file):
            file_size = os.path.getsize(file)
            # 定义一个全局变量file_size_sum
            global file_size_sum
            file_size_sum += file_size
        if os.path.isdir(file):
            func_folds_size(file)
    return file_size_sum
print('第二题作业：')
print('当前路径文件大小为：', end='')
print(func_folds_size("./"))
print('=='*60)
#第三题作业
'''
自动取款机的存取款模拟
功能清单：
1、账号的数据源
2、登陆
3、退出
4、查询余额
5、取钱
6、存钱
7、界面与交互
'''
#1、账号的数据源
acno_list = [
    {'acno':'000123', 'bal':2000},
    {'acno':'000456', 'bal':3000},
    {'acno':'000789', 'bal':4000},
]

#1、登陆
def login_system(acno):
    '''
    登陆判断
    :param acno:
    :return:
    '''
    #遍历列表中的账号数据，当账号不存在时，提示重新输入
    list_acno_flag = []
    for i in acno_list:
        for key in i:
            list_acno_flag.append(i['acno'])
    if acno not in list_acno_flag:
        print('账号不存在，请重新输入')
        acno = input('账号：')
        login_system(acno)
    else:
        print('=' * 20, '成功进入自动取款机系统', '=' * 20)
        return acno
#2、主界面信息
def main():
    '''
    主界面风格
    :return:
    '''
    print('=' * 20, '    请选择操作类型   ', '=' * 20)
    print('{:1} {:<20} {:<20}'.format(' ', '1、 查询', '2、 存款'))
    print('{:1} {:<20} {:<20}'.format(' ', '3、 取款', '4、 退出'))

#3、查询
def select_bal(acno):
    '''
    查询余额
    :param acno:00
    :return:
    '''
    for i in acno_list:
        for key in i:
            if i[key] == acno:
                print('|{:<10}|{:<10}|'.format('acno', 'bal'))
                print('-'*25)
                print('|{:<10}|{:<10}|'.format(acno, i['bal']))
#4、存款
def add_bal(acno, bal):
    for index,i in enumerate(acno_list):
        for key in i:
            if i[key] == acno:
                new_bal = i['bal'] + bal
                acno_list[index] = {'acno':acno, 'bal':new_bal}
                break
#5、取款，注意取款不能超过当前余额
def minus_bal(acno, bal):
    for index, i in enumerate(acno_list):
        for key in i:
            if i[key] == acno:
                if bal <= i['bal']:
                    global new_bal
                    new_bal = i['bal'] - bal
                if bal > i['bal']:
                    print('余额不足！请重新输入！')
                    print('-' * 25)
                    bal = int(input('取款金额：'))
                    print('-' * 25)
                    minus_bal(acno, bal)
                acno_list[index] = {'acno':acno, 'bal':new_bal}
                break


#6、递归调用
def recal():
    main()
    os_type = int(input('操作类型：'))
    print('-' * 25)
    if os_type == 1:  # 1、查询
        select_bal(acno)
        recal()
    elif os_type == 2:  # 2、存款
        bal = int(input('存款金额：'))
        print('-' * 25)
        add_bal(acno, bal)
        print('存款成功，当前账户信息为：')
        print('-' * 25)
        select_bal(acno)
        recal()
    elif os_type == 3:  # 3、取款
        bal = int(input('取款金额：'))
        print('-' * 25)
        minus_bal(acno, bal)
        print('取款成功，当前账户信息为：')
        print('-' * 25)
        select_bal(acno)
        recal()
    elif os_type == 4:  # 4、退出
        print('see u later')
        print('-' * 25)
    else:  # 其他，抛出异常提示
        print('请输入正确的操作类型数字！')
        print('-' * 25)
        recal()
print('第三题作业：')
print('=' * 20, '欢迎使用自动取款机系统', '=' * 20)
print('=' * 20, '    请输入登陆账号   ', '=' * 20)
acno = input('账号：')
login_system(acno)
recal()

print('第一周作业完成！'*3)